package com.hz.pay.center.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.hz.pay.center.model.PaySerialInfo;
import com.hz.pay.center.service.IPaySerialService;
import com.hz.pay.center.utils.AlipayUtils;
import com.mysql.cj.protocol.PacketReceivedTimeHolder;
import com.pay.common.enums.PayStatusEnum;
import com.pay.common.resp.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class PollingTaskController {

    @Autowired
    private IPaySerialService paySerialService;

    @Autowired
    private AlipayUtils alipayUtils;





    /**
     *  支付结果轮询任务接口
     * @param payChannel
     * @return
     */
    @RequestMapping("/trade/polling")
    public Response tradePolling(@RequestParam String payChannel){

        //1.参数校验

        //2.获取所有支付中的数,获取到list集合
      List<PaySerialInfo> paySerialInfoList = paySerialService.queryAllPollingList(payChannel);
      if(CollectionUtils.isEmpty(paySerialInfoList)){
          return null;
      }

      //3.for循环调用支付公司的接口

        for (PaySerialInfo paySerialInfo :paySerialInfoList){

            String paySerialNo = paySerialInfo.getPaySerialNo();


            try {
                //4.调用支付公司的支付接口查询
                AlipayTradeQueryResponse response = alipayUtils.alipayTradeQuery(paySerialNo);

                //5.解析结果，更新支付流水表中的支付状态

                if ("10000".equals(response.getCode())){

                    //更新为成功

                  String tradeStatus = response.getTradeStatus();

//                    交易状态：WAIT_BUYER_PAY（交易创建，等待买家付款）、
//                    TRADE_CLOSED（未付款交易超时关闭，或支付完成后全额退款）
//                    、TRADE_SUCCESS（交易支付成功）
//                    、TRADE_FINISHED（交易结束，不可退款）

                    PaySerialInfo record = new PaySerialInfo();

                    if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus) ){

                        record.setPayDesc(PayStatusEnum.PAU_SUCCESS.getMsg());
                        record.setPayStatus(PayStatusEnum.PAU_SUCCESS.getCode());

//                        record.setPaySuccessTime();

//                        record.setUpdateTime();

//                        record.setBankRespNo();
                        record.setId(paySerialInfo.getId());

                        paySerialService.updateTrade(record);


                    } else if("WAIT_BUYER_PAY".equals(tradeStatus)){

                        //TODO,没有查询回来。
                        // 轮询5次没有查到结果，需要你主动关闭交易



                    } else if("TRADE_CLOSED".equals(tradeStatus)){

                        record.setPayDesc(PayStatusEnum.PAY_FAIL.getMsg());
                        record.setPayStatus(PayStatusEnum.PAY_FAIL.getCode());
                        paySerialService.updateTrade(record);

                    }

                }

            } catch (AlipayApiException e) {
                e.printStackTrace();
            }


        }



        return new Response();


    }


    @RequestMapping("/refund/polling")
    public Response refundPolling(){


        // 查询tb_refund_serials 中 支付渠道为 微信的  状态 为 退款中 和银行处理中的数据

        //调用退款查询接口


        //更新状态。

        //异步通知，

        return null;
    }

}
